package com.divemotor.ventarepuestosinternet.service.impl;

import java.io.Serializable;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.divemotor.ventarepuestosinternet.dao.EstadoCotizacionDAO;
import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.model.EstadoCotizacion;
import com.divemotor.ventarepuestosinternet.service.EstadoCotizacionService;
import com.divemotor.ventarepuestosinternet.util.Constantes;

@Service(value="estadoCotizacionService")
@Transactional(rollbackFor=Exception.class)
public class EstadoCotizacionServiceImpl implements EstadoCotizacionService, Serializable {

	private static final long serialVersionUID = 1L;
	
	@Autowired
	private EstadoCotizacionDAO estadoCotizacionDAO;

	@Override
	public List<EstadoCotizacion> listarEstados() throws DivemotorBusinessException {
		return estadoCotizacionDAO.listarTodos();
	}

	@Override
	public List<EstadoCotizacion> buscarEstados(EstadoCotizacion estadoCotizacion) throws DivemotorBusinessException {
		return estadoCotizacionDAO.buscarEstados(estadoCotizacion);
	}

	@Override
	public void insertarNuevoEstadoCotizacion(
			EstadoCotizacion estadoCotizacion) throws DivemotorBusinessException {

		String campoTexto=estadoCotizacion.getNombre().toString();
		
		if(campoTexto==null || campoTexto.trim().equals("")){
			throw new DivemotorBusinessException("Por favor ingrese el nombre del estado.");
		}else if(estadoCotizacionDAO.listarPorPropiedad("nombre", estadoCotizacion.getNombre()).size()>0){
			throw new DivemotorBusinessException("Ya existe un estado con el mismo nombre.", null, Constantes.EXCEPCION_NEGOCIO);
		}else{
			estadoCotizacionDAO.insertar(estadoCotizacion);
		}
	}

	@Override
	public void actualizarEstadoCotizacion(EstadoCotizacion estadoCotizacion) throws DivemotorBusinessException {
		List<EstadoCotizacion> listaEstadosPorNombre=estadoCotizacionDAO.listarPorPropiedad("nombre", estadoCotizacion.getNombre());
		boolean valido=true;
		String mensaje="";
		//TODO REFACTORIZAR
		if(listaEstadosPorNombre.size()<1 && valido){
			
		}else if(listaEstadosPorNombre.size()==1 && listaEstadosPorNombre.get(0).getIdEstadoCotizacion().equals(estadoCotizacion.getIdEstadoCotizacion())){
			
		}else{
			valido=false;
			mensaje="El nombre del estado ya existe.";
		}
		
		if (valido) {
			estadoCotizacionDAO.actualizar(estadoCotizacion);
		}else{
			throw new DivemotorBusinessException(mensaje, null, Constantes.EXCEPCION_NEGOCIO);
		}
	}

	@Override
	public void eliminarEstadoCotizacion(EstadoCotizacion estadoCotizacion) throws DivemotorBusinessException {
		estadoCotizacion.setEstado(Constantes.ESTADO_ELIMINADO);
		estadoCotizacionDAO.actualizar(estadoCotizacion);
	}

	@Override
	public List<EstadoCotizacion> listarDisponiblesVendedor() throws DivemotorBusinessException {
		return estadoCotizacionDAO.listarDisponiblesVendedor();
	}
}
